This commit is contained in:
Jason Riggs 2020-10-23 18:15:49 +02:00 committed by GitHub
commit e2ce032e23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 185 additions and 0 deletions

25
.arduino-ci.yml Normal file
View File

@ -0,0 +1,25 @@
# https://github.com/Arduino-CI/arduino_ci/issues/159
# copied from vendor/bundle/ruby/2.6.0/gems/arduino_ci-0.3.0/misc/default.yml
platforms:
mega2560:
board: arduino:avr:mega:cpu=atmega2560
package: arduino:avr
gcc:
features:
defines:
- __AVR_ATmega2560__
# added this line
- ARDUINO_CI
warnings:
flags:
unittest:
platforms:
- mega2560
testfiles:
reject:
- "Common.cpp"
compile:
platforms:
- mega2560

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.bundle
Gemfile.lock
vendor
# C++ stuff
*.bin
*.bin.dSYM

2
Gemfile Normal file
View File

@ -0,0 +1,2 @@
source 'https://rubygems.org'
gem 'arduino_ci'

152
test/test.cpp Normal file
View File

@ -0,0 +1,152 @@
#include "Arduino.h"
#include "ArduinoUnitTests.h"
#include <PID_v1.h>
unittest(direct) {
// Define Variables we'll be connecting to
double Setpoint, Input, Output;
// Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1, DIRECT);
// initialize the variables we're linked to
Input = 50;
Setpoint = 100;
// turn the PID on
myPID.SetMode(AUTOMATIC);
for (int i = 0; i < 1000; i++) {
delay(200);
if (myPID.Compute()) {
Input = Input + (Output - Input) / 25.6;
}
}
// std::cout << "Input = " << Input << "; Output = " << Output << std::endl;
assertEqual(Setpoint, round(Input));
}
unittest(reverse) {
// Define Variables we'll be connecting to
double Setpoint, Input, Output;
// Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1, REVERSE);
// initialize the variables we're linked to
Input = 50;
Setpoint = 100;
// turn the PID on
myPID.SetMode(AUTOMATIC);
for (int i = 0; i < 1000; i++) {
delay(200);
if (myPID.Compute()) {
Input = Input + (Input - Output) / 25.6;
}
}
// std::cout << "Input = " << Input << "; Output = " << Output << std::endl;
assertEqual(Setpoint, round(Input));
}
unittest(mode) {
// Define Variables we'll be connecting to
double Setpoint, Input, Output;
// Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1, REVERSE);
// initialize the variables we're linked to
Input = 50;
Setpoint = 100;
// turn the PID on
myPID.SetMode(MANUAL);
for (int i = 0; i < 1000; i++) {
delay(200);
if (myPID.Compute()) {
Input = Input + (Input - Output) / 25.6;
}
}
// std::cout << "Input = " << Input << "; Output = " << Output << std::endl;
assertEqual(50, round(Input));
}
unittest(getFunctions) {
// Define Variables we'll be connecting to
double Setpoint, Input, Output;
// Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1, REVERSE);
// initialize the variables we're linked to
Input = 50;
Setpoint = 100;
// turn the PID on
myPID.SetMode(AUTOMATIC);
// std::cout << "Input = " << Input << "; Output = " << Output << std::endl;
assertEqual(2, myPID.GetKp());
assertEqual(5, myPID.GetKi());
assertEqual(1, myPID.GetKd());
assertEqual(REVERSE, myPID.GetDirection());
assertEqual(AUTOMATIC, myPID.GetMode());
}
unittest(sampleTimeWorks) {
// Define Variables we'll be connecting to
double Setpoint, Input, Output;
// Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1, REVERSE);
// initialize the variables we're linked to
Input = 50;
Setpoint = 100;
bool flag = false;
// turn the PID on
myPID.SetMode(AUTOMATIC);
for (int i = 0; i < 1000; i++) {
delay(200);
if (myPID.Compute()) {
flag = true;
Input = Input + (Input - Output) / 25.6;
}
}
// std::cout << "Input = " << Input << "; Output = " << Output << std::endl;
assertTrue(flag);
}
unittest(sampleTimeNotWorks) {
// Define Variables we'll be connecting to
double Setpoint, Input, Output;
// Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1, REVERSE);
// initialize the variables we're linked to
Input = 50;
Setpoint = 100;
bool flag = false;
// turn the PID on
myPID.SetMode(MANUAL);
for (int i = 0; i < 1000; i++) {
delay(199);
if (myPID.Compute()) {
flag = true;
Input = Input + (Input - Output) / 25.6;
}
}
// std::cout << "Input = " << Input << "; Output = " << Output << std::endl;
assertFalse(flag);
}
unittest_main()